from pathlib import Path
from typing import Union

"""
封装一些常用的函数，便于操作

function:
    delete_file: 删除文件
    empty_directory: 删除文件夹内部所有文件，但保留文件夹本身
    remove_directory: 删除文件夹以及内部所有文件
    hex2rgb: 用于颜色格式的转换
"""


def delete_file(file: Union[str, Path]):
    """
    用于删除文件

    :param file: 需要删除的文件，可以是字符串，也可以是一个Path对象
    """

    path = file if isinstance(file, Path) else Path(file)

    if path.is_file():
        path.unlink(missing_ok=True)

    if path.is_dir():
        raise ValueError("参数不是文件，若要删除文件夹，请使用'remove_directory'函数")


def empty_directory(directory: Union[str, Path]):
    """
    用于清空文件夹
    :param directory: 需要清空的文件夹，可以是字符串，也可以是一个Path对象
    """
    path = directory if isinstance(directory, Path) else Path(directory)
    for child_path in path.iterdir():
        if child_path.is_dir():
            empty_directory(child_path)
        else:
            child_path.unlink()


def remove_directory(directory: Union[str, Path]):
    """
    用于删除文件夹，参数同上面empty_directory函数
    """
    path = directory if isinstance(directory, Path) else Path(directory)
    empty_directory(path)
    path.rmdir()


def hex2rgb(color: str) -> tuple:
    """
    用于将HEX格式的颜色（字符串格式）转换成RGB格式（元组格式）
    :param color: 需要转换的字符串，可以带'#'，也可以不带
    :return: 返回一个元组，分别是RGB的值
    """
    if len(color) != 7 and len(color) != 6:
        raise ValueError("字符串长度非法")

    if len(color) == 7:
        # 这个是前面带＃的
        r = int(color[1:3], 16)
        g = int(color[3:5], 16)
        b = int(color[5:7], 16)
    else:
        # 这个是不带的
        r = int(color[0:2], 16)
        g = int(color[2:4], 16)
        b = int(color[4:6], 16)
    return r, g, b
